There are a variety of different applications that can use programmable integrated circuits (ICs). Programmable ICs programmable resources (e.g., logic circuits and/or programmable routing resources) that can be programmed to implement various circuit designs. One type of programmable IC, referred to as a field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay locked loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet, and so forth.
Some ICs include enough components and functionality to effectively serve as a computer system on a single IC chip. ICs with such functionality are sometimes referred to as a system on a chip (SOC). An SOC can include one or more processor circuits that execute software instructions in order to carry out different functions and/or include programmable resources that can be programmed to form various circuit designs. Upon startup (e.g., hard-power on or hard reset), the SOC can first execute a boot read only memory (ROM) code that configures the SOC to retrieve and load a boot image. The boot image can specify how peripheral functional blocks of the SOC are configured, control and implement a configuration bitstream, setup and run the operating system (OS), and/or perform other boot-related functions. Often, the boot image for an SOC can be retrieved and loaded from an external device coupled to an SOC.